home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / emulate / zxupload.arc / MIDIXFER.S next >
Text File  |  1992-05-31  |  2KB  |  98 lines

  1. ;midixfer (ST version)
  2. ;by Stephen K Mulrine
  3. ;receive a Spectrum program (plus header) through MIDI IN
  4. ;and save in current directory
  5. MCTRL    equ    $fffffc04
  6. MDATA    equ    $fffffc06
  7. PAL    equ    $ffff8240
  8.     lea    HIDE(pc),a1
  9.     bsr    disp        ;clear screen and hide annoying cursor
  10.     move.l    #0,-(a7)
  11.     move.w    #$20,-(a7)
  12.     trap    #1        ;supervisor mode
  13.     addq.w    #6,a7
  14.     move.w    PAL.w,d1
  15.     move.w    d1,COLOUR    ;store old screen colour
  16.     move.w    #$77,PAL.w    ;turn screen cyan
  17.     move.b    #21,MCTRL.w    ;keep ST's hands off ACIA
  18.     clr.l    d1
  19.     clr.l    d2
  20.     bsr.s    midird        ;get LSB of file length
  21.     move.b    d1,d2
  22.     bsr.s    midird        ;get MSB of file length
  23.     asl.w    #8,d1
  24.     add.w    d1,d2        ;put them together
  25.     move.l    d2,LEN
  26.     subi.w    #1,d2        ;subtract one for DBRA
  27.     lea    BUF(pc),a1
  28. loop    bsr.s    midird        ;see a byte
  29.     move.b    d1,(a1)+    ;and pick it up
  30.     dbra    d2,loop        ;all day long you'll have good luck
  31.     move.b    #131,MCTRL.w    ;give ACIA back to ST
  32.     move.w    COLOUR,d1
  33.     move.w    d1,PAL.w    ;restore screen colour
  34.     move.l    d0,-(a7)
  35.     move.w    #$20,-(a7)
  36.     trap    #1        ;back to user mode
  37.     addq.w    #6,a7
  38.     bsr.s    save
  39.     lea    UNHIDE(pc),a1
  40.     bsr.s    disp        ;restore cursor
  41.     move.w    #0,-(a7)
  42.     trap    #1        ;and exit
  43.  
  44. midird    eori.w    #$0777,PAL.w    ;invert screen colour for laffs
  45.     move.b    MCTRL.w,d1
  46.     btst.l    #0,d1        ;is there a byte to be read?
  47.     beq.s    midird
  48.     move.b    MDATA.w,d1    ;read it
  49.     move.w    d1,PAL.w    ;change screen colour for more laffs
  50.     rts
  51.  
  52. save    lea    BUF(pc),a1
  53.     addq.l    #1,a1        ;first byte of data is file type
  54.     lea    FNAME(pc),a2
  55.     move.w    #9,d1
  56. loop2    move.b    (a1)+,(a2)+    ;copy next 10 bytes for filename
  57.     dbra    d1,loop2
  58.     move.b    #0,(a2)
  59.     move.w    #0,-(a7)
  60.     pea    FNAME(pc)
  61.     move.w    #$3c,-(a7)
  62.     trap    #1        ;open the file for writing
  63.     addq.l    #8,a7
  64.     tst.w    d0        ;did something go horribly wrong?
  65.     bmi.s    err        ;kaboom
  66.     move.w    d0,d6
  67.     pea    BUF(pc)
  68.     move.l    LEN,d2
  69.     move.l    d2,-(a7)
  70.     move.w    d6,-(a7)
  71.     move.w    #$40,-(a7)
  72.     trap    #1        ;save the whole block of data
  73.     add.l    #12,a7
  74.     move.w    d6,-(a7)
  75.     move.w    #$3e,-(a7)
  76.     trap    #1        ;close the file
  77.     addq.l    #4,a7
  78.     rts
  79.  
  80. err    lea    ERMS(pc),a1
  81. disp    move.l    a1,-(a7)
  82.     move.w    #9,-(a7)
  83.     trap    #1        ;print something
  84.     addq.l    #6,a7
  85.     rts
  86.  
  87.     section    data
  88. HIDE    dc.b    27,"E",27,"f",0
  89. UNHIDE    dc.b    27,"e",0
  90. ERMS    dc.b    27,"EFile write error",13,0
  91.     even
  92.  
  93.     section    bss
  94. FNAME    ds.b    12
  95. LEN    ds.l    1
  96. COLOUR    ds.w    1
  97. BUF    ds.b    65536
  98.